//********************************************************************************************************
// Product Name: MapWindow.dll Alpha
// Description:  The basic module for MapWindow version 6.0
//********************************************************************************************************
// The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); 
// you may not use this file except in compliance with the License. You may obtain a copy of the License at 
// http://www.mozilla.org/MPL/ 
//
// Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF 
// ANY KIND, either expressed or implied. See the License for the specificlanguage governing rights and 
// limitations under the License. 
//
// The Original Code is from MapWindow.dll version 6.0
//
// The Initial Developer of this Original Code is Ted Dunsford. Created 6/6/2008 2:13:24 PM
// 
// Contributor(s): (Open source contributors should list themselves and their modifications here). 
//
//********************************************************************************************************

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Text;
using MapWindow;
using MapWindow.Main;
using MapWindow.Data;
using MapWindow.Drawing;
using MapWindow.Geometries;


using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;


namespace MapWindow.DirectX
{


    /// <summary>
    /// The IRenderableDX library is specifically for drawing layers that can draw
    /// to the directX environment, like the Map control.
    /// </summary>
    public interface IRenderableDX: IRenderable
    {

        #region Events

        /// <summary>
        /// Occurs after drawing, indicating if an exception or cancellation occured
        /// </summary>
        event EventHandler<DrawCompletedArgsDX> DrawingCompleted;
        
        /// <summary>
        /// Occurs immediately before drawing, allowing it to be cancelled
        /// </summary>
        event EventHandler<DrawVerifyArgsDX> BeforeDrawing;


        #endregion


        #region Methods

        /// <summary>
        /// Causes the layer or object to draw itself to the map.  This may initiate
        /// one-time loading of buffers, but should not do heavy calculations every
        /// cycle.
        /// </summary>
        /// <param name="args">An args parameter</param>
        void Draw3D(DrawArgsDX args);

        /// <summary>
        /// Forces the Initialization to take place.  If this is not called manually, it will be called
        /// during the Draw3D process.
        /// </summary>
        /// <param name="args"></param>
        void Initialize(DrawArgsDX args);

   
        #endregion

        #region Properties

      
        /// <summary>
        /// Gets the number of parts
        /// </summary>
        int NumParts
        {
            get;
        }



        #endregion



    }
}
